package com.smart.community.commons.constant;

/**
 * 系统常量类
 * 定义系统中使用的各种常量
 * @author Wu.Liang
 * @since 2024-12-19
 * @version 1.0.0
 */
public class Constants {
    
    // ========================= 系统常量 =========================
    /**
     * 系统名称
     */
    public static final String SYSTEM_NAME = "智慧社区管理系统";
    
    /**
     * 系统版本
     */
    public static final String SYSTEM_VERSION = "1.0.0";
    
    /**
     * 默认字符编码
     */
    public static final String DEFAULT_CHARSET = "UTF-8";
    
    /**
     * 默认日期格式
     */
    public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
    
    /**
     * 默认时间格式
     */
    public static final String DEFAULT_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
    
    // ========================= 业务常量 =========================
    /**
     * 默认管理员用户名
     */
    public static final String DEFAULT_ADMIN_USERNAME = "ADMIN";
    
    /**
     * 默认管理员密码
     */
    public static final String DEFAULT_ADMIN_PASSWORD = "admin123";
    
    /**
     * 默认分页大小
     */
    public static final int DEFAULT_PAGE_SIZE = 10;
    
    /**
     * 最大分页大小
     */
    public static final int MAX_PAGE_SIZE = 1000;
    
    /**
     * 密码最小长度
     */
    public static final int PASSWORD_MIN_LENGTH = 6;
    
    /**
     * 密码最大长度
     */
    public static final int PASSWORD_MAX_LENGTH = 20;
    
    /**
     * 密码加密盐值长度
     */
    public static final int SALT_LENGTH = 20;
    
    /**
     * 最大文件大小（MB）
     */
    public static final long MAX_FILE_SIZE = 10;
    
    /**
     * 缓存过期时间（秒）
     */
    public static final long CACHE_EXPIRE_TIME = 3600;
    
    /**
     * Sa-Token密钥
     */
    public static final String SA_TOKEN_SECRET = "smart_community_sa_token_secret_key";
    
    /**
     * Sa-Token过期时间（小时）
     */
    public static final long SA_TOKEN_EXPIRE_HOURS = 24;
    
    // ========================= 消息常量 =========================
    /**
     * 操作成功消息
     */
    public static final String SUCCESS_MESSAGE = "操作成功";
    
    /**
     * 操作失败消息
     */
    public static final String FAIL_MESSAGE = "操作失败";
    
    /**
     * 参数错误消息
     */
    public static final String PARAM_ERROR_MESSAGE = "参数错误";
    
    /**
     * 权限不足消息
     */
    public static final String PERMISSION_DENIED_MESSAGE = "权限不足";
    
    /**
     * 数据不存在消息
     */
    public static final String DATA_NOT_FOUND_MESSAGE = "数据不存在";
    
    /**
     * 数据已存在消息
     */
    public static final String DATA_ALREADY_EXISTS_MESSAGE = "数据已存在";
    
    // ========================= 正则表达式常量 =========================
    /**
     * 用户名正则表达式
     */
    public static final String USERNAME_REGEX = "^[a-zA-Z0-9_]+$";
    
    /**
     * 密码正则表达式
     */
    public static final String PASSWORD_REGEX = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]{6,20}$";
    
    /**
     * 手机号正则表达式
     */
    public static final String PHONE_REGEX = "^1[3-9]\\d{9}$";
    
    /**
     * 邮箱正则表达式
     */
    public static final String EMAIL_REGEX = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$";
    
    /**
     * 身份证号正则表达式
     */
    public static final String ID_CARD_REGEX = "^[1-9]\\d{5}(18|19|20)\\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$";
    
    // ========================= 文件上传常量 =========================
    /**
     * 文件上传根路径
     */
    public static final String UPLOAD_ROOT_PATH = "/uploads";
    
    /**
     * 图片文件类型
     */
    public static final String[] IMAGE_TYPES = {".jpg", ".jpeg", ".png", ".gif", ".bmp"};
    
    /**
     * 文档文件类型
     */
    public static final String[] DOCUMENT_TYPES = {".pdf", ".doc", ".docx", ".xls", ".xlsx"};
    
    // ========================= 缓存常量 =========================
    /**
     * 用户信息缓存前缀
     */
    public static final String USER_CACHE_PREFIX = "user:";
    
    /**
     * 角色信息缓存前缀
     */
    public static final String ROLE_CACHE_PREFIX = "role:";
    
    /**
     * 权限信息缓存前缀
     */
    public static final String PERMISSION_CACHE_PREFIX = "permission:";
    
    // ========================= 安全常量 =========================
    /**
     * 区域管理员角色编码
     */
    public static final String REGION_ADMIN_ROLE_CODE = "REGION_ADMIN";
    
    /**
     * 物业管理员角色编码
     */
    public static final String PROPERTY_ADMIN_ROLE_CODE = "PROPERTY_ADMIN";
    
    /**
     * 超级管理员角色编码
     */
    public static final String SUPER_ADMIN_ROLE_CODE = "SUPER_ADMIN";
    
    /**
     * 工具类，防止实例化
     */
    private Constants() {
        throw new UnsupportedOperationException("工具类不能实例化");
    }
}
